package com.sisSaude.daos;

import java.sql.ResultSet;
import java.util.Vector;

import com.sisSaude.entityBeans.AvaliacaoAntropometrica;
import com.sisSaude.utils.DataProvider;
import com.sisSaude.utils.SqlFactory;

public class AvaliacaoAntropometricaDAO extends GenericDAO<AvaliacaoAntropometrica> {
	
	// fields
	public static String SELECT_BASICA = " SELECT AvaliacaoAntropometrica.*," +
			                             "        Aluno.nome AS nomeDoAluno," +
			                             "        Funcionario.nome AS nomeDoAvaliador " +
			                             " FROM AvaliacaoAntropometrica " +
			                             " INNER JOIN Aluno ON Aluno.id = AvaliacaoAntropometrica.idAluno " + 
			                             " INNER JOIN Funcionario ON Funcionario.id = AvaliacaoAntropometrica.idAvaliador "; 

	// public methods
	public AvaliacaoAntropometrica get(int id) {
		AvaliacaoAntropometrica avaliacaoAntropometrica = null;
		String sql = SELECT_BASICA + " WHERE AvaliacaoAntropometrica.id = ? "; 
		DataProvider dataProvider = new DataProvider();
		Vector<Object> params = new Vector<Object>();
		params.add(id);
		try {
			dataProvider.select(sql, params);
			if (dataProvider.next()) {
				avaliacaoAntropometrica = new AvaliacaoAntropometrica();
				loadAttribs(avaliacaoAntropometrica, dataProvider.getResultSet());
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			dataProvider.close();
		}
		return avaliacaoAntropometrica;
	}
	public boolean delete(AvaliacaoAntropometrica avaliacaoAntropometrica) {
		String sql = SqlFactory.getSqlDelete("AvaliacaoAntropometrica", "id");
		DataProvider dataProvider = new DataProvider();
		Vector<Object> params = new Vector<Object>();
		params.add(avaliacaoAntropometrica.getId());
		try {
			dataProvider.execute(sql, params);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			dataProvider.close();
		}
		return true;
	}
	public void loadAttribs(AvaliacaoAntropometrica avaliacao, ResultSet r) {
		try {
			avaliacao.setId(r.getInt("id"));
			avaliacao.setIdAluno(r.getInt("idAluno"));
			avaliacao.setDataDaAvaliacao(r.getDate("dataDaAvaliacao"));
			avaliacao.setIdAvaliador(r.getInt("idAvaliador"));
			avaliacao.setPeso(r.getDouble("peso"));
			avaliacao.setAltura(r.getInt("altura"));
			avaliacao.setPescoco(r.getDouble("pescoco"));
			avaliacao.setBicepsDireito(r.getDouble("bicepsDireito"));
			avaliacao.setBicepsEsquerdo(r.getDouble("bicepsEsquerdo"));
			avaliacao.setPunhoDireito(r.getDouble("punhoDireito"));
			avaliacao.setPunhoEsquerdo(r.getDouble("punhoEsquerdo"));
			avaliacao.setToraxNormal(r.getDouble("toraxNormal"));
			avaliacao.setToraxInspirado(r.getDouble("toraxInspirado"));
			avaliacao.setToraxExpirado(r.getDouble("toraxExpirado"));
			avaliacao.setAntebracoDireito(r.getDouble("antebracoDireito"));
			avaliacao.setAntebracoEsquerdo(r.getDouble("antebracoEsquerdo"));
			avaliacao.setCintura(r.getDouble("cintura"));
			avaliacao.setQuadril(r.getDouble("quadril"));
			avaliacao.setCoxaDireita(r.getDouble("coxaDireita"));
			avaliacao.setCoxaEsquerda(r.getDouble("coxaEsquerda"));
			avaliacao.setPanturrilhaDireita(r.getDouble("panturrilhaDireita"));
			avaliacao.setPanturrilhaEsquerda(r.getDouble("panturrilhaEsquerda"));
			avaliacao.setNomeDoAluno(r.getString("nomeDoAluno"));
			avaliacao.setNomeDoAvaliador(r.getString("nomeDoAvaliador"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	
	public AvaliacaoAntropometrica getUltimaAvaliacao(int idAluno) {
		AvaliacaoAntropometrica avaliacao = null;
		String sql = SELECT_BASICA + " WHERE AvaliacaoAntropometrica.idAluno = ? " +
									 " ORDER BY AvaliacaoAntropometrica.dataDaAvaliacao DESC" +
									 " LIMIT 1"; 
		DataProvider dataProvider = new DataProvider();
		Vector<Object> params = new Vector<Object>();
		params.add(idAluno);
		try {
			dataProvider.select(sql, params);
			if (dataProvider.next()) {
				avaliacao = new AvaliacaoAntropometrica();
				loadAttribs(avaliacao, dataProvider.getResultSet());
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} finally {
			dataProvider.close();
		}
		return avaliacao;
	}
	

	// protected methods
	protected boolean insert(AvaliacaoAntropometrica avaliacaoAntropometrica) {
		String sql = SqlFactory.getSqlInsert("AvaliacaoAntropometrica");
		DataProvider dataProvider = new DataProvider();
		Vector<Object> params = new Vector<Object>();
		params.add(avaliacaoAntropometrica.getId());
		params.add(avaliacaoAntropometrica.getIdAluno());
		params.add(avaliacaoAntropometrica.getIdAvaliador());
		params.add(avaliacaoAntropometrica.getDataDaAvaliacao());
		params.add(avaliacaoAntropometrica.getPeso());
	 	params.add(avaliacaoAntropometrica.getAltura());
	 	params.add(avaliacaoAntropometrica.getPescoco());
	 	params.add(avaliacaoAntropometrica.getBicepsDireito());
		params.add(avaliacaoAntropometrica.getBicepsEsquerdo());
		params.add(avaliacaoAntropometrica.getPunhoDireito());
		params.add(avaliacaoAntropometrica.getPunhoEsquerdo());
		params.add(avaliacaoAntropometrica.getToraxNormal());
		params.add(avaliacaoAntropometrica.getToraxInspirado());
		params.add(avaliacaoAntropometrica.getToraxExpirado());
		params.add(avaliacaoAntropometrica.getAntebracoDireito());
		params.add(avaliacaoAntropometrica.getAntebracoEsquerdo());
		params.add(avaliacaoAntropometrica.getCintura());
		params.add(avaliacaoAntropometrica.getQuadril());
		params.add(avaliacaoAntropometrica.getCoxaDireita());
		params.add(avaliacaoAntropometrica.getCoxaEsquerda());
		params.add(avaliacaoAntropometrica.getPanturrilhaDireita());
		params.add(avaliacaoAntropometrica.getPanturrilhaEsquerda());
		try {
			dataProvider.execute(sql, params);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			dataProvider.close();
		}
		return true;
	}
	protected boolean update(AvaliacaoAntropometrica avaliacaoAntropometrica) {
		String sql = SqlFactory.getSqlUpdate("AvaliacaoAntropometrica", "AvaliacaoAntropometrica.id");
		DataProvider dataProvider = new DataProvider();
		Vector<Object> params = new Vector<Object>();
		params.add(avaliacaoAntropometrica.getIdAluno());
		params.add(avaliacaoAntropometrica.getIdAvaliador());
		params.add(avaliacaoAntropometrica.getDataDaAvaliacao());
		params.add(avaliacaoAntropometrica.getPeso());
	 	params.add(avaliacaoAntropometrica.getAltura());
	 	params.add(avaliacaoAntropometrica.getPescoco());
	 	params.add(avaliacaoAntropometrica.getBicepsDireito());
		params.add(avaliacaoAntropometrica.getBicepsEsquerdo());
		params.add(avaliacaoAntropometrica.getPunhoDireito());
		params.add(avaliacaoAntropometrica.getPunhoEsquerdo());
		params.add(avaliacaoAntropometrica.getToraxNormal());
		params.add(avaliacaoAntropometrica.getToraxInspirado());
		params.add(avaliacaoAntropometrica.getToraxExpirado());
		params.add(avaliacaoAntropometrica.getAntebracoDireito());
		params.add(avaliacaoAntropometrica.getAntebracoEsquerdo());
		params.add(avaliacaoAntropometrica.getCintura());
		params.add(avaliacaoAntropometrica.getQuadril());
		params.add(avaliacaoAntropometrica.getCoxaDireita());
		params.add(avaliacaoAntropometrica.getCoxaEsquerda());
		params.add(avaliacaoAntropometrica.getPanturrilhaDireita());
		params.add(avaliacaoAntropometrica.getPanturrilhaEsquerda());
		params.add(avaliacaoAntropometrica.getId());
		try {
			dataProvider.execute(sql, params);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			dataProvider.close();
		}
		return true;
	}
}